package com.example.factory.presenter.search;

import com.example.common.factory.data.DataSource;
import com.example.common.factory.presenter.BasePresenter;
import com.example.factory.data.helper.UserHelper;
import com.example.factory.model.card.UserCard;

import net.qiujuer.genius.kit.handler.Run;
import net.qiujuer.genius.kit.handler.runable.Action;

import java.util.List;

import retrofit2.Call;

/**
 * @author:0.2℃
 * @date： 2022-01-15 11:43
 * @version:
 * @Description ：搜索人的实现
 */
public class SearchUserPresenter extends BasePresenter<SearchContract.UserView>
        implements SearchContract.Presenter, DataSource.Callback<List<UserCard>> {
    private static final String TAG = "SearchUserPresenter";

    // 把网络请求的一个call存储起来
    private Call searchCall;

    public SearchUserPresenter(SearchContract.UserView view) {
        super(view);
    }

    /**
     * 进行网络的搜索
     * @param content
     */
    @Override
    public void search(String content) {
        start();
        Call call = searchCall;
        if (searchCall != null && searchCall.isCanceled()) {
            // 如果上一次的请求还没有取消，那我们就要先把他取消
            call.cancel();
        }
        /**
         * 有一个情况，我们的搜索可能会多次点击搜索
         * 所以为了避免上一次的搜索还没结束就开始下一次搜索
         * 所以为了避免冲突，我们要做一个搜索取消，就是当开始搜索的时候，都要取消上一次的搜索
         */
        searchCall = UserHelper.search(content, this);

    }

    @Override
    public void onDataNotAvailable(int strRes) {
        // 搜索失败
        SearchContract.UserView userView = getView();
        if (userView != null) {
            Run.onUiAsync(new Action() {
                @Override
                public void call() {
                    userView.showError(strRes);
                }
            });
        }

    }

    @Override
    public void onDataLoaded(final List<UserCard> userCards) {
        // 搜索成功
        SearchContract.UserView userView = getView();
        if (userView != null) {
            Run.onUiAsync(new Action() {
                @Override
                public void call() {
                    userView.onSearchDone(userCards);
                }
            });
        }
    }
}
